/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。
 * 
 * 欢迎到知启蒙网站（https://www.zhiqim.com）购买正版软件，知启蒙还提供许多开源框架和软件。
 * 
 * 1、本软件产品所有源代码受《中华人民共和国著作权法》和其他有关法律、法规的保护，其所有知识产权归湖南知启蒙科技有限公司所有；
 * 2、禁止复制和修改。不得复制修改、翻译或改编本软件所有源代码，或者基于本软件产品创作衍生作品；
 * 3、禁止进行逆向工程。不得对本软件的源代码进行逆向工程、反编译或试图以其他方式发现软件的源代码；
 * 4、个别授权：如需进行商业性的销售、复制、分发，包括但不限于软件销售、预装、捆绑等，必须获得知启蒙的书面授权和许可；
 * 5、保留权利：本注释未明示授权的其他一切权利仍归知启蒙所有，任何人使用其他权利时必须获得知启蒙的书面同意。
*/
package net.redxyz.repost.resource.action;

import net.redxyz.repost.resource.SessionUser;
import net.redxyz.repost.service.dao.ArticleDao;
import net.redxyz.repost.service.dao.PermissionDao;
import net.redxyz.repost.service.dao.UserDao;
import net.redxyz.top.data.vas.ArticleUserSubscribe;
import net.redxyz.top.dbo.sys.SysArticle;
import net.redxyz.top.dbo.sys.SysPermission;
import net.redxyz.top.dbo.user.User;
import net.redxyz.top.dbo.user.UserGift;

import org.zhiqim.httpd.HttpRequest;
import org.zhiqim.httpd.context.core.Action;
import org.zhiqim.kernel.util.DateTimes;
import org.zhiqim.kernel.util.Validates;
import org.zhiqim.orm.ORM;
import org.zhiqim.orm.dbo.Selector;

/**
 * 检测用户权限控制
 *
 * @version v7.0.1 @author zouzhigang 2021-7-30 新建与整理
 */
public class PermissionAction implements Action
{
    public void execute(HttpRequest request) throws Exception
    {
        //1.检查appUrl
        String appUrl = request.getParameter("appUrl");
        if (Validates.isEmpty(appUrl))
        {
            request.returnCloseDialog();
            return;
        }
        
        //2.检查是否设置了功能的版本
        SysPermission permission = PermissionDao.itemPermissionByUrl(appUrl);
        if (permission == null)
        {//默认如果没有在应用信息表中，认为是功能还没开放，要管理员增加到应用信息表中
            request.returnCloseDialog("该功能暂未开放，请与客服联系");
            return;
        }
        
        //3.尝试去数据库和淘宝端更新用户版本
        SessionUser sessionUser = request.getSessionUser(SessionUser.class);
        updateUserVersion(sessionUser);
        
        //4.验证用户是否有权限，如果有，则关闭对话框，转到该功能
        if (sessionUser.isAppPermissionUrl(appUrl))
        {//验证成功，转到指appUrl
            request.setRedirect("javascript:{parent.location.href='"+appUrl+"';parent.Z.Dialog.close();}");
            return;
        }
        
        //5.查出支持版本收费项，让用户去升级
        int appRule = permission.getPermissionRule();
        SysArticle article = ArticleDao.item(appRule);
        
        request.setAttribute("article", article);
    }
    
    /** 到数据库和淘宝更新用户版本 */
    private void updateUserVersion(SessionUser sessionUser) throws Exception
    {
        String nick = sessionUser.getNick();
        
        User user = UserDao.getUser(nick);
        
        //检查订购关系
        ArticleUserSubscribe order = UserDao.getUserOrder(nick, 3);
        if (order.isSuccess())
        {//查询成功
            int versionNo = order.getVersionNo();
            String endDate = order.getEndDate();
            
            user.setVersionNo(versionNo);
            user.setEndDate(endDate);
            
            UserDao.updateUserVersion(nick, versionNo, endDate);
        }
        
        Selector selector = new Selector();
        selector.addMust("nick", sessionUser.getNick());
        selector.addMaybe("status", 1);
        selector.addMaybeThenG("endDate", DateTimes.getDateString());
        selector.addOrderbyDesc("endDate");
        UserGift userGift = ORM.table().item(UserGift.class, selector);
        if (userGift != null && userGift.getVersionNo() > user.getVersionNo())
        {//把赠送放置到用户数据中
            user.setVersionNo(userGift.getVersionNo());
            user.setStartDate(userGift.getBeginDate());
            user.setEndDate(userGift.getEndDate());
        }
        
        sessionUser.setUser(user);
    }
}
